package com.github.utils;

import com.github.logger.LoggerKt;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Objects;

public class DateFormat {

    public enum FormatP {
        YYYY_DD_MM_HH_MM_SS("yyyy/MM/dd HH:mm:ss"),
        YYYY_MM_DD("yyyy/MM/dd"),
        YYYY_MM_DD_1("yyyy年MM月dd日"),
        YYYY_MM_DD_HH_MM_SS_1("yyyy年MM月dd日 HH:mm:ss"),

        YYYY_MM_DD_HH2("yyyy-MM-dd"),
        MM_DD_YYYY1("MM月dd日yyyy年"),
        MM_DD_YYYY2("MM-dd-yyyy"),
        MM_DD_YYYY3("MM/dd/yyyy"),
        MM_DD_YYYY_HH_MM_SS1("MM月dd日yyyy年 HH:mm:ss"),
        MM_DD_YYYY_HH_MM_SS2("MM-dd-yyyy HH:mm:ss"),
        MM_DD_YYYY_HH_MM_SS3("MM/dd/yyyy HH:mm:ss"),
        ;
        String format = "";

        FormatP(String format) {
            this.format = format;
        }
    }


    /**
     * 格式化日期
     * @param formatP  格式枚举值
     * @param date  日期对象
     * @return 格式化后的字符串
     */
    public static String format(FormatP formatP, Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(formatP.format);
        return sdf.format(date);
    }


    /**
     * 格式化日期
     * @param formatP  格式枚举值
     * @param time  时间戳字符串
     * @return 格式化后的字符串
     */
    public static String format(FormatP formatP, long time) {
        SimpleDateFormat sdf = new SimpleDateFormat(formatP.format);
        return sdf.format(new Date(time));
    }


    /**
     * 获取指定日期格式的时间戳
     * @param dateStr  日期字符串
     * @return 时间戳
     */
    public static long getTime(String dateStr) {
        java.text.DateFormat dateInstance = SimpleDateFormat.getDateInstance();
        try {
            return Objects.requireNonNull(dateInstance.parse(dateStr)).getTime();
        } catch (ParseException e) {
            LoggerKt.i("getTime error " + e.getMessage());
            return -1;
        }
    }
}
